From f59f126a9344f265e3766003766d7a66b6a638e3 Mon Sep 17 00:00:00 2001
From: Daniel Kolesa <daniel@octaforge.org>
Date: Sun, 23 Oct 2022 01:26:37 +0200
Subject: [PATCH 3/4] clang: use --as-needed by default

---
 clang/lib/Driver/ToolChains/Gnu.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
index f203cae1d..9e181a79a 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -560,6 +560,13 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
   bool NeedsSanitizerDeps = addSanitizerRuntimes(ToolChain, Args, CmdArgs);
   bool NeedsXRayDeps = addXRayRuntime(ToolChain, Args, CmdArgs);
   addLinkerCompressDebugSectionsOption(ToolChain, Args, CmdArgs);
+
+  // Use --as-needed by default for all explicit linker inputs on Linux
+  // We don't reset it afterwards because explicit argument does not
+  // get reset either (and that is permitted, so it should be fine)
+  if (Triple.isOSLinux())
+    CmdArgs.push_back("--as-needed");
+
   AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA);
 
   addHIPRuntimeLibArgs(ToolChain, Args, CmdArgs);
-- 
2.38.0

